﻿using System;

namespace Preactor.ObjectModel.Interfaces
{
    public interface IOperation : IPreactorRecord
    {
        string OrderNumber { get; set; }

        string PartNumber { get; set; }

        int OperationNumber { get; set; }

        DateTime SetupStartTime { get; set; }

        DateTime StartTime { get; set; }

        DateTime EndTime { get; set; }

        string ResourceName { get; set; }

        int ResourceNameValue { get; set; }

        double Quantity { get; set; }

        int LotNumber { get; set; }

        bool IsLocked { get; set; }

        TimeSpan TotalProcessTime { get; set; }

        bool IsDisabled { get; set; }

        DateTime EarliestStartDate { get; set; }

        String Customer { get; set; }

        int Priority { get; set; }

        // int SetupMultiplier { get; set; }
        TimeSpan DeliveryBuffer { get; set; }

        // TimeSpan TotalSetupTime { get; set; }
        bool IsTimePerBatch { get; set; }

        TimeSpan ProcessTime { get; set; }

        int MidBatchQuantity { get; set; }
        
        DateTime MidBatchTime { get; set; }

        TimeSpan EffectiveOperationTime  { get; set; }

        double LotSize { get; set; }

        bool IsSequencingEnabled { get; set; }

        bool IsMaterialComplete { get; set; }

        bool IsMaterialShortage { get; set; }

        bool IsMaterialOverSupply { get; set; }

        String DemandStatus { get; set; }

        DateTime SupplyDate { get; set; }

        DateTime DemandDate { get; set; }

        DateTime ActualEarliestStartDate { get; set; }

        DateTime ActualDueDate { get; set; }

        bool IsScheduled { get; }

        bool Schedule(string resourceName, DateTime dateTime);

        bool PutOnResource(string resourceName, DateTime dateTime);

        bool QuickSchedule(string resourceName, OperationTimes operationTimes);

        void Unschedule();

        IResource Resource { get; }

        //IResourceGroup<IResource> ResourceGroup { get; } 
    }
}